package com.mimosa.util.datetime;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;

/**
 * 格式化日期信息的对象
 * 
 * @date 2012-3-10
 * @filename DateUtil.java
 * @author Yanlei Han
 */
public final class DateFormatUtil {
	public static final long MILLONS = 1000l;
	static Calendar calendar = null;
	static final String SHORT_FORMAT = "yyyy-MM-dd";
	static final String LONG_FORMAT = "yyyy-MM-dd HH:mm:ss";

	static {
		calendar = Calendar.getInstance();
		calendar.set(1970, 0, 1, 0, 0, 0);
	}

	/**
	 * 将日期对象格式化字符串的形式，并返回只包含年月日形式的字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String shortDateFormat(Date date) {
		return dateFormat(date, SHORT_FORMAT);
	}

	/**
	 * 将日期对象格式化字符串的形式，并返回只包含年月形式的字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatWithYearMonth(Date date) {
		return dateFormat(date, "yyyy-MM");
	}

	/**
	 * 将日期对象格式化字符串的形式，并返回只包含年形式的字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatWithYear(Date date) {
		return dateFormat(date, "yyyy");
	}

	public static String longDateFormat(Date date) {
		return dateFormat(date, LONG_FORMAT);
	}

	/***
	 * 将String转化为Date
	 */
	public static Date shortParseDate(String date) {
		return parseDate(date, SHORT_FORMAT);
	}

	public static Date longParseDate(String date) {
		return parseDate(date, LONG_FORMAT);
	}

	/**
	 * 获取从1970-01-01开始的时间毫秒表示
	 * 
	 * @return
	 */
	public static long getTimesFromStard() {
		return calendar.getTimeInMillis();
	}

	public static String formatStandartSecond(Integer seconds) {
		Date date = new Date(calendar.getTimeInMillis() + seconds * MILLONS);
		return longDateFormat(date);
	}

	/**
	 * 根据指定的格式格式化日期对象
	 * 
	 * @param date
	 *            日期对象
	 * @param foramt
	 *            要格式的格式
	 * @return
	 */
	public static String dateFormat(Date date, String foramt) {
		String result = StringUtils.EMPTY;
		if (date != null) {
			SimpleDateFormat df = new SimpleDateFormat(foramt);
			result = df.format(date);
		}
		return result;
	}

	public static Date parseDate(String date, String format) {
		Date result = null;
		try {
			SimpleDateFormat df = new SimpleDateFormat(format);
			result = df.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 自动判断日期的长格式与短式，并解析日期字符串
	 * 
	 * @param date
	 *            日期格式
	 * @return
	 */
	public static Date autoParseDate(String date) {
		Date result = null;
		if (StringUtils.isNotBlank(date)) {
			if (date.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {
				result = parseDate(date, SHORT_FORMAT);
			} else if (date.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}")) {
				result = parseDate(date, LONG_FORMAT);
			}
		}
		return result;
	}
}